package com.snk.common.aspect;


import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;


@Slf4j
@Aspect
@Component
public class SysExceptionAspect {

    /**
     * 此方法可以作为一个异常监控方法
     * @param jp
     * @param e
     */
    @AfterThrowing(pointcut = "bean(*ServiceImpl)",throwing="e")
    public void doHandleException(JoinPoint jp,Throwable e){
        //通过连接点获取目标对象类型
        Class<?> targetClass=jp.getTarget().getClass();
        String className=targetClass.getName();
        //通过连接点获取方法签名对象
        MethodSignature ms= (MethodSignature) jp.getSignature();
        String methodName=ms.getName();//获取目标方法名
        String targetClassMethod = className+"."+methodName;
        log.error("{} ' exception msg is {}",targetClassMethod,e.getMessage() );
        //拓展？
        /**
         * 1将日志写到日志文件
         * 2将出现异常的这个信息发送给某个人的email例如    QQ邮箱
         * 3将出现异常的情况发短信给某人（运维人员）
         * 4报警（）播放一段很难听的音乐）
         */
    }
}
